import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //编写程序数一下 1到 100 的所有整数中出现多少个数字9
        //print9();

        //给定一个数字，判定一个数字是否是素数
//        Scanner scanner = new Scanner(System.in);
//        int a = scanner.nextInt();
//        System.out.println(judgePrime(a));
        //求出0～n之间的所有“水仙花数”并输出
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        printNar(n);

        //计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
        //sum();

        //给定两个数，求这两个数的最大公约数
//        Scanner scanner = new Scanner(System.in);
//        int a = scanner.nextInt();
//        int b = scanner.nextInt();
//        System.out.println(comDiv(a, b));

        //二进制1的个数。
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(print1Num(n));
    }
    public static int print1Num(int n){
        int sum = 0;
        while (n != 0){
            if((n & 1) == 1) {
                sum++;
            }
            n = n >>> 1;
        }
        return sum;
    }
    public  static int comDiv(int x, int y){
        int i = x;
        if(x > y){
            i = y;
        }

        while(i > 0){

            if (x % i == 0 && y % i == 0){
                break;
            }
            i--;
        }
        return i;
    }
    public  static  void sum(){
        //计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
        double sum = 0.0;
        for(int i = 1; i <= 100; i++){
            sum = sum + (double)1/i;
        }
        System.out.println(sum);
    }
    public static void printNar(int n){
        //求出0～n之间的所有“水仙花数”并输出。
        // (“水仙花数”是指一个三位数，其各位数字的立方和确好等于该数本 身，如；153＝1^3＋5^3＋3^3，则153是一个“水仙花数“。）
        for (int i = 0; i < n; i++) {
             int temp = i;
             int sum = 0;//记录和
             int flag = 0;//记录位数

            //记录位数
             while(temp != 0){
                 flag++;
                 temp /= 10;
             }
             temp = i;
            //记录和
             int x = flag;
            while(temp != 0){
                int a = 1;
                //记录每位阶层
                while(flag != 0){
                     a = a * (temp % 10);
                    flag--;
                }
                sum += a;
                flag = x;
                temp /= 10;
            }

            if(i == sum){
                System.out.print(i+" ");
            }
        }
    }

    public static void printX() {
        //牛客 打印 X 图形
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            for(int i = 1; i <= n;i++){
                for(int j = 1; j <= n;j++){
                    if(i == j || i + j == n + 1){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }
    public static boolean judgePrime(int a){
        //给定一个数字，判定一个数字是否是素数
        if(a == 1){
            return true;
        }
        for (int i = 2; i < a/2; i++) {
            if(a % i == 0){
                return false;
            }
        }
        return true;
    }
    public static void print9(){
        //编写程序数一下 1到 100 的所有整数中出现多少个数字9
        int count = 0;
        for(int i = 1; i <= 100;i++){
            int temp = i;
            while(temp != 0){
                if(temp % 10 == 9){
                    count++;
                }
               temp =temp / 10;
            }
        }
        System.out.println("1-100中9的个数 " + count);

    }
}